package ec.edu.ups.relevo.datos.modeloBD;


import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

@Entity
@Table(name="Mensajes") //Especifica la tabla de la base de datos
@SequenceGenerator(name="MENSAJE_SECUENCIA", sequenceName="mensaje_sq")//especifica una sequencia
public class Mensaje implements Serializable {
	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="MENSAJE_SECUENCIA")//autoincrementable por sequencia
	@Column(name="msj_id")
	private long id;
	
	@Column(name="msj_detalle")
	private String detalle;
	
	@Column(name="msj_asunto")
	private String asunto;
	
	@Column(name="msj_estado")
	private String estado;
	
	@Column(name="msj_mail")
	private boolean mail;
	
	@Column(name="msj_sms")
	private boolean sms;
	
	@Column(name="msj_audio")
	private boolean audio;
	
	@Column(name="msj_codigo_peticion")
	private String codigoPeticion;
	
	@Temporal(TemporalType.DATE)
	@Column(name="msj_fecha_peticion")
	private Date fechaPeticion; 
	
	
	@Temporal(TemporalType.DATE)
	@Column(name="msj_fecha_envio")
	private Date fechaEnvio;
	
	@Column(name="msj_eliminado")
	private boolean eliminado;
	
	@ManyToOne//un mensaje es enviado por un usuario
	@JoinColumn(name="usuario" )
	private Usuario usuario;
		
	@OneToMany( mappedBy = "mensaje" ,cascade = CascadeType.ALL, fetch=FetchType.EAGER) //un mensaje esta  en muchos mensaje_contactos
    List<MensajeContacto> msj_contactos;
	
	@Transient
	String destinosAux="";
	
	/**
	 * Constructor
	 */
	public Mensaje()
	{
		/**valores por default*/
		mail=false;
		audio=false;
		sms=false;
		
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getDetalle() {
		return detalle;
	}

	public void setDetalle(String detalle) {
		this.detalle = detalle;
	}

	public String getAsunto() {
		return asunto;
	}

	public void setAsunto(String asunto) {
		this.asunto = asunto;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public boolean isMail() {
		return mail;
	}

	public void setMail(boolean mail) {
		this.mail = mail;
	}

	public boolean isSms() {
		return sms;
	}

	public void setSms(boolean sms) {
		this.sms = sms;
	}

	public boolean isAudio() {
		return audio;
	}

	public void setAudio(boolean audio) {
		this.audio = audio;
	}

	public String getCodigoPeticion() {
		return codigoPeticion;
	}

	public void setCodigoPeticion(String codigoPeticion) {
		this.codigoPeticion = codigoPeticion;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public List<MensajeContacto> getMsj_contactos() {
		return msj_contactos;
	}

	public void setMsj_contactos(List<MensajeContacto> msj_contactos) {
		this.msj_contactos = msj_contactos;
	}

	public Date getFechaPeticion() {
		return fechaPeticion;
	}

	public void setFechaPeticion(Date fechaPeticion) {
		this.fechaPeticion = fechaPeticion;
	}

	public Date getFechaEnvio() {
		return fechaEnvio;
	}

	public void setFechaEnvio(Date fechaEnvio) {
		this.fechaEnvio = fechaEnvio;
	}

	public boolean isEliminado() {
		return eliminado;
	}

	public void setEliminado(boolean eliminado) {
		this.eliminado = eliminado;
	}
	
	

	/**
	 * @return the destinosAux
	 */
	public String getDestinosAux() {
		for(MensajeContacto mc:msj_contactos)
		{
			destinosAux+=mc.getContacto().getNombre()+", ";
			
		}	
		return destinosAux;
	}

	/**
	 * @param destinosAux the destinosAux to set
	 */
	public void setDestinosAux(String destinosAux) {
		this.destinosAux = destinosAux;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Mensaje [id=" + id + ", detalle=" + detalle + ", asunto="
				+ asunto + ", estado=" + estado + ", mail=" + mail + ", sms="
				+ sms + ", audio=" + audio + ", codigoPeticion="
				+ codigoPeticion + ", fechaPeticion=" + fechaPeticion
				+ ", fechaEnvio=" + fechaEnvio + ", eliminado=" + eliminado
				+ "]";
	}
	
	

}
